;(function($){
	function getDataById(items, id){
		var item = null;
		//从box里面查找所有的div，如果已经添加了（id相等），则不再添加
		for(var i=0; i<items.length; i++){
			if(items[i].id-id==0){//找到了
				item = items[i];
				break;
			}
		}
		return item;
	}
	function removeDataById(items, id){
		var item = null;
		var index = -1;
		//从box里面查找所有的div，如果已经添加了（id相等），则不再添加
		for(var i=0; i<items.length; i++){
			if(items[i].id-id==0){//找到了
				index = i;
				break;
			}
		}
		if(index>-1){
			item = items.splice(index, 1);
		}
		return item;
	}
	$.fn.extend({
		"addItemBox":function(){
			var box = $(this);
			var items = box.get()[0].items;
			if(items==null){
				items = [];
				box.get()[0].items = items;
			}
			$(arguments).each(function(i, obj){
				var item = getDataById(items, obj.id);
				var itemObj = null;
				
				if(item!=null){//如果已经存在了，更新其删除标记
					itemObj = $("#item_box_"+obj.id, box);
					if(!!item.persist){//新添加的数据肯定没有persist字段，因此只能从原有数据中判断
						//已有数据的编辑修改
						if((!!item.del)^(!!obj.del)){//需要更新切换删除状态
							item.del = !!obj.del;//更新数据
							if(item.del){
								itemObj.css("text-decoration", "line-through");
							}else{
								itemObj.css("text-decoration", "none");
							}
						}
					}else{//不是已有数据的编辑，而是新添加的数据编辑
						if(!obj.del){//此时只需要判断新数据就行了。新数据不会带有del标记的。如果是del为true，应该调用removeItemBox()方法
							//先不做处理，因为不应该走到此处
							throw new Error("怎么会这样调用呢？应该调用removeItemBox()方法！");
						}else{
							//也不做处理，有了就有了，不需要再添加了。
						}
					}
				}else{
					//不存在，则添加一个
					var div = document.createElement("div");
					itemObj = $(div);
					itemObj.attr("id", "item_box_"+obj.id)
					.css("border", "1px solid gray")
					.css("margin", "1px")
					.css("float", "left")
					.css("width", "auto")
					.css("background-color", !!obj.persist?"#CCECFF":"#FFFFCC")
					.css("text-decoration", !!obj.del?"line-through":"none")
					.bind("mouseover", function(){
						$(this).css("background-color", "#FFCCCC");
					}).bind("mouseout", (function(){
						var persist = !!obj.persist;
						return function(){
							$(this).css("background-color", persist?"#CCECFF":"#FFFFCC");
						};
					})());
					var label = document.createElement("label");
					$(label).html(obj.name).appendTo(itemObj);
					label = document.createElement("label");
					$(label).html("[X]").css("color", "#FF9999")
					.bind("mouseover", function(){
						$(this).css("color", "#FF0000");
					}).bind("mouseout", (function(){
						return function(){
							$(this).css("color", "#FF9999");
						};
					})()).bind("click", (function(){
						var data = obj;
						var myItems = items;
						return function(){
							var itembox = $(this).parent();
							if(!!data.persist){//持久化过的关系
								if(!data.del){//没有删除的，删除之；
									itembox.css("text-decoration", "line-through");
									data.del = true;
								}else{//已经删除的，恢复之
									itembox.css("text-decoration", "none");
									data.del = false;
								}
							}else{//未持久化过的关系
								itembox.remove();
								//这个地方要从items里面删除这个对象
								removeDataById(myItems, data.id);
								data.del = true;
							}
							if(window["itemBoxDeleteEventCallBack"]){
								try{
									itemBoxDeleteEventCallBack(data);
								}catch(e){}
							}
						};
					})()).appendTo(itemObj);
					box.append(itemObj);
					items.push(obj);
					if(window["itemBoxDeleteEventCallBack"]){
						try{
							itemBoxDeleteEventCallBack(obj);
						}catch(e){}
					}
				}
				
				
				

				
				return box;
			});
		},
		"removeItemBox":function(){
			var box = $(this);
			var items = box.get()[0].items;
			if(items==null){
				return;
			}
			$(arguments).each(function(i, obj){
				var id = obj;
				if(typeof obj==="object"){
					id = obj.id;
				}
				var item = getDataById(items, id);
				var itemObj = null;
				if(item!=null){
					itemObj = $("#item_box_"+id);
					if(!!item.persist){//原先有的，标记删除即可
						if(!item.del){//原先没有删除的才标记删除。不重复做删除动作
							itemObj.css("text-decoration", "line-through");
							item.del = true;
						}
					}else{//原先没有的，才真正删除
						itemObj.remove();
						item.del = true;
						removeDataById(items, id);
					}
					if(window["itemBoxDeleteEventCallBack"]){
						try{
							itemBoxDeleteEventCallBack(item);
						}catch(e){}
					}
				}
			});
		},
		"getItemBoxes": function(){
			var box = $(this);
			var items = box.get()[0].items;
			if(items==null){
				return [];
			}
			var result = [];
			$.each(items, function(i, item){
				var id=item.id;
				var name = item.name;
				var del = !!item.del;
				var persist = !!item.persist;
				result.push({id:id, name:name, del:del, persist:persist});
			});
			return result;
		},
		"clearItemBoxes":function(){
			var box = $(this);
			box.html("");
			box.get()[0].items = null;
		},
		"isItemBoxSelected":function(id){
			var box = $(this);
			var items = box.get()[0].items;
			if(items==null){
				return false;
			}
			var item = getDataById(items, id);
			if(item!=null){
				return !item.del;
			}
			return false;
		}
	});
})(jQuery);